package leetcode;

/**
 * @program: datastructureandalogorithm
 * @description:
 * @author: hmx
 * @create: 2021-12-18 14:40
 **/
public class LeetCode543 {

    //存储最长路径的节点个数
    int res = 0;

    public int diameterOfBinaryTree(TreeNode root) {
        depth(root);
        //res存储的是路径最大的节点个数,而最大的路径长度为点数-1
        return res - 1;
    }

    int depth(TreeNode root) {
        if (root == null) {
            return 0;
        }

        //左子树高度
        int l = depth(root.left);
        //右子树高度
        int r = depth(root.right);

        //存储res和l+r+1中的最大值,l+r+1 即root节点的两个子树的高度+1就是以root为根节点的最长两个路径上的点的个数;
        res = Math.max(res, l + r + 1);

        //返回以root为根节点的数的高度
        return Math.max(l, r) + 1;
    }

}
